为什么在“ | 您所在的位置:网站首页 › shell command 变量 › 为什么在“ |
先看这个信息 “-bash: XX: command not found” 直译过来就是bash找不到相应的命令前文里我们提到这个问题是由于"PATH"设置出错导致我们输入这些常用命令如"ls","cat","vim"等我们之前解决这个问题的方法是 '键入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"' 那么关键信息就是这个名为"PATH"的变量首先我们在初始化的系统(阿里云自带的centos)下键入"echo $PATH" 出现了以下结果 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 我们根据给出的路径进行查找 /usr/local/sbin 什么也没 /usr/local/bin 还是什么都没 /usr/bin以及最后的 /bin 刷的一下,满满的绿色,有意思的是这两个文件夹显示完全内容一样,有兴趣的可以用“pwd”和"mkdir"试试 我们来 “find” 一下 果不其然,我们常用的命令都在这里不过我们之前用来解决问题的"export"看起来并不在这里,这一点我们之后再谈 现在我们找到了放置常用命令 "ls","vim"等的放置地下一步我们来找一下为什么"PATH"设置错误后所有的"/bin"路径下的命令都变成不可用的了 首先我们要知道这几个文件 /etc/profile$HOME/.bash_profile$HOME/.bashrc 其中 /etc/profile文件是系统上默认的bash shell的主启动文件,系统上的每个用户登录时都会执行这个启动文件让我们打开它看看 我们需要看的是它的头和尾 头部 头部"pathmunge"函数的作用:判断当前系统的PATH中是否有该命令的目录,如果没有,则判断是要将该目录放于PATH之前还是之后。什么情况下没有呢?我们可以看看这里的case语句:根据冒号分割的参数“$1”是的话则通过否则判断“$2”的参数,是的话通过,不是的话将“$1”代表的参数放至末尾。 尾部 尾部使用for语句来迭代/etc/profile.d目录下的所有文件。这为Linux系统提供了一个放置特定应用程序启动文件的地方。当用户登录时,shell会执行这些文件。我们可以去看看。 现在让我们回到一开始的问题, 为什么在“-bash: XX: command not found”下常用命令如“cat”,“ls”变得不可用? 答:因为用来查询命令的“PATH”环境变量设置出错(多半是格式出错导致的路径覆盖)导致Linux系统执行/etc/profile文件中的"pathmunge"函数找不到对应的路径。于是放置于原先路径下的常用命令就变得不可用了。 PS/usr 软件放置处 与我们常用的软件有关/root(/,根目录) 开机系统相关/bin 放置一些系统必备脚本 case语句会检查每个参数是不是有效选项。是的话就执行对应case语句中的命令。不管选项按什么顺序出现在命令行上,这种方法都适用。 |
CopyRight 2018-2019 实验室设备网 版权所有 |